home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / asm / alib11b.zip / CODE1.ZIP / DISKFILE / FILESIZE.ASM < prev    next >
Assembly Source File  |  1994-10-04  |  2KB  |  69 lines

  1. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(  DISK   )
  2. FILE_SIZE1 - find an open file's size
  3. ;
  4. ; inputs:    BX = file handle
  5. ; output:    if CF = 0, DX:AX = file size (low word in AX)
  6. ;            if CF = 1, AX = DOS error code
  7. ;            
  8. ;* * * * * * * * * * * * * *
  9.     public    FILE_SIZE1
  10. FILE_SIZE1    PROC    FAR
  11.    APUSH   BX,CX,SI,DI
  12.    MOV       AX,4201h        ;set ds:ax to file posn (save)
  13.    XOR     CX,CX
  14.    MOV     DX,CX
  15.    INT     21h
  16.    JB      FSIZE_1
  17.    MOV     DI,DX
  18.    MOV     SI,AX
  19.    MOV       AX,4202h        ;seek to end of file, size -> dx:ax
  20.    XOR     CX,CX
  21.    MOV     DX,CX
  22.    INT     21h
  23.    PUSH    DX
  24.    PUSH    AX
  25.    MOV       AX,4200h         ;restore orig. file posn
  26.    MOV     CX,DI
  27.    MOV     DX,SI
  28.    INT     21h
  29.    POP       AX            ;put file size in dx:ax
  30.    POP     DX
  31. FSIZE_1:
  32.    jnc       fsize_exit
  33.    stc
  34. fsize_exit:
  35.    APOP    DI,SI,CX,BX
  36.    RETF
  37. FILE_SIZE1    ENDP
  38.  
  39. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(  DISK   )
  40. FILE_SIZE2 - find a closed file's size
  41. ;
  42. ; inputs:    DS:DX = pointer to file name asciiz string
  43. ; output:    if CF = 0, DX:AX = file size (low word in AX)
  44. ;            if CF = 1, AX = DOS error code
  45. ;            
  46. ;* * * * * * * * * * * * * *
  47.  
  48.     public    FILE_SIZE2
  49. FILE_SIZE2    PROC    FAR
  50.     apush    bx,cx,si,di
  51.     mov    ax,3d00h
  52.     int    21h            ;open file
  53.     jc    fs_err2            ;jmp if error
  54.     mov    bx,ax            ;get file handle
  55.     call    file_size1
  56.     pushf
  57.     push    ax
  58.     mov    ah,3eh
  59.     int    21h            ;close file
  60.     pop    ax
  61.     popf
  62. fs_err2:
  63.     apop    di,si,cx,bx    
  64.     ret    
  65. FILE_SIZE2    ENDP
  66.  
  67.